<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  

  
  <title>Jenkins继续集成入门 | Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="jenkins介绍 它是一个自动化的周期性的集成测试过程，从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的，无需人工干预，有利于减少重复过程以节省时间、费用和工作量； 它需要有专门的集成服务器来执行集成构建； 它需要有代码托管工具支持，比如SVN； 官网地址地址：https://jenkins.io  Jenkins的主要目标是监控软件开发流程，快速显示问题；  jenkins持">
<meta name="keywords" content="jenkins">
<meta property="og:type" content="article">
<meta property="og:title" content="Jenkins继续集成入门">
<meta property="og:url" content="http://yoursite.com/2018/10/12/2018-06-15-Jenkins持续集成入门篇/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="jenkins介绍 它是一个自动化的周期性的集成测试过程，从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的，无需人工干预，有利于减少重复过程以节省时间、费用和工作量； 它需要有专门的集成服务器来执行集成构建； 它需要有代码托管工具支持，比如SVN； 官网地址地址：https://jenkins.io  Jenkins的主要目标是监控软件开发流程，快速显示问题；  jenkins持">
<meta property="og:locale" content="default">
<meta property="og:image" content="https://images2015.cnblogs.com/blog/847059/201707/847059-20170717182750050-778350694.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170714123028884-832349549.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170714123307462-966368924.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170714124223728-1077236899.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716214358128-205148242.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170714141717822-622133511.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170714142045509-1995538133.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170714142118337-693339373.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/2016-12-21%20at%2011.30.jpeg">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716155929660-803327139%20%281%29.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716214545582-1050555026.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/2016-12-21%20at%2011.322.jpeg">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183333035-55092743.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183351956-101901026.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183427175-1360645386.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183417347-1561858092.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183451988-1617162197.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183509956-1082587330.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183525269-154596904.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183427175-1360645386.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161820753-249838500.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716160850519-1650103209.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716160935878-992287442.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161034222-53368878.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161159160-1872856235.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161220847-1522363124.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161314050-1040331419.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161341050-664320142.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161853144-1435846665.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162022285-1737582130.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162207113-850922877.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162406394-2105747705.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162511878-1693704711.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162445566-315786576.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184406503-1744205535.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184427503-815120918.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184506628-497720938.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184524300-1439112462.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184604081-115536023.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184635628-2001157301.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162207113-850922877.png">
<meta property="og:image" content="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184736503-1575925022.png">
<meta property="og:image" content="https://images2015.cnblogs.com/blog/847059/201707/847059-20170717185032800-1945978892.png">
<meta property="og:updated_time" content="2018-11-01T14:24:04.951Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Jenkins继续集成入门">
<meta name="twitter:description" content="jenkins介绍 它是一个自动化的周期性的集成测试过程，从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的，无需人工干预，有利于减少重复过程以节省时间、费用和工作量； 它需要有专门的集成服务器来执行集成构建； 它需要有代码托管工具支持，比如SVN； 官网地址地址：https://jenkins.io  Jenkins的主要目标是监控软件开发流程，快速显示问题；  jenkins持">
<meta name="twitter:image" content="https://images2015.cnblogs.com/blog/847059/201707/847059-20170717182750050-778350694.png">
  
    <link rel="alternate" href="/org/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  <link rel="stylesheet" href="/org/css/style.css">
</head>
</html>
<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/org/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/org/">Home</a>
        
          <a class="main-nav-link" href="/org/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/org/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://yoursite.com"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main"><article id="post-2018-06-15-Jenkins持续集成入门篇" class="article article-type-post" itemscope="" itemprop="blogPost">
  <div class="article-meta">
    <a href="/org/2018/10/12/2018-06-15-Jenkins持续集成入门篇/" class="article-date">
  <time datetime="2018-10-12T09:03:30.000Z" itemprop="datePublished">2018-10-12</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      Jenkins继续集成入门
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <h2 id="jenkins介绍"><a href="#jenkins介绍" class="headerlink" title="jenkins介绍"></a>jenkins介绍</h2><ul>
<li>它是一个自动化的周期性的集成测试过程，从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的，无需人工干预，有利于减少重复过程以节省时间、费用和工作量；</li>
<li>它需要有专门的集成服务器来执行集成构建；</li>
<li>它需要有代码托管工具支持，比如SVN；</li>
<li><p>官网地址地址：<a href="https://jenkins.io/" target="_blank" rel="noopener">https://jenkins.io</a></p>
</li>
<li><p>Jenkins的主要目标是监控软件开发流程，快速显示问题；</p>
</li>
<li><p>jenkins持续集成中的任何一个环节都是自动完成的，无需太多的人工干预，所以它有利于减少重复过程以节省时间、费用和工作量。</p>
</li>
</ul>
<p>本文介绍的是在CentOS系统下，用rpm包安装方式进行启动。 </p>
<a id="more"></a>
<h2 id="2-1-安装准备"><a href="#2-1-安装准备" class="headerlink" title="2.1 安装准备"></a><strong>2.1 安装准备</strong></h2><table>
<thead>
<tr>
<th>软件</th>
<th>版本</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>JDK</td>
<td>1.7.0_76</td>
<td>解压安装，注意设置好环境变量</td>
</tr>
<tr>
<td>ant</td>
<td>1.9.9</td>
<td>JDK1.7.x只能安装1.9.x系列ant</td>
</tr>
<tr>
<td>Jenkins</td>
<td>2.33</td>
<td>JDK1.7.x只能安装Jenkins2.3.x系列Jenkins</td>
</tr>
</tbody>
</table>
<h2 id="2-2-安装ant"><a href="#2-2-安装ant" class="headerlink" title="2.2 安装ant"></a>2.2 安装ant</h2><p>ant是基于java的一款构建工具，通过配置build.xml，让项目可以进行编译，部署，打包。</p>
<p>因为我们要实现自动构建，所以首先要安装ant。</p>
<ul>
<li>从<a href="http://ant.apache.org" target="_blank" rel="noopener">http://ant.apache.org</a> 上下载tar.gz版ant</li>
<li>wget <a href="http://www-eu.apache.org/dist//ant/binaries/apache-ant-1.9.9-bin.tar.gz" target="_blank" rel="noopener">http://www-eu.apache.org/dist//ant/binaries/apache-ant-1.9.9-bin.tar.gz</a></li>
<li>解压tar包</li>
<li>tar -zxvf apache-ant-1.9.9-bin.tar.gz</li>
<li>移动到/usr/share下</li>
<li>cp -r apache-ant-1.9.9 /usr/share</li>
<li>切换到/usr/share目录下，重命名</li>
<li>cd /usr/share</li>
<li>mv apache-ant-1.9.9 ant</li>
<li>配置环境变量</li>
<li>vi /etc/profile</li>
</ul>
<p>#set Ant enviroment</p>
<p>export ANT_HOME=/usr/share/ant</p>
<p>export PATH=PATH:PATH:ANT_HOME/bin</p>
<ul>
<li>立刻将配置生效</li>
<li>source /etc/proifle</li>
<li>测试ant是否生效</li>
<li>ant -version</li>
</ul>
<p>出现如下提示便表示安装成功。</p>
<p><img src="https://images2015.cnblogs.com/blog/847059/201707/847059-20170717182750050-778350694.png" alt="img"> </p>
<p>ant的使用查看这篇文章：<a href="http://www.cnblogs.com/zishengY/p/7226320.html" target="_blank" rel="noopener">ant在持续集成的应用</a> </p>
<p><strong>2.3 卸载及安装jenkins</strong></p>
<h3 id="2-3-1-卸载原来安装的rpm包"><a href="#2-3-1-卸载原来安装的rpm包" class="headerlink" title="2.3.1 卸载原来安装的rpm包"></a>2.3.1 卸载原来安装的rpm包</h3><p>　　首先查看是否已经安装过jenkins</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rpm -qa|grep jenkins</span><br></pre></td></tr></table></figure>
<p>我这里用的是jdk1.7，所以下载版本<a href="http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm" target="_blank" rel="noopener">http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm</a>(jenkins下载地址：<a href="http://pkg.jenkins-ci.org/redhat/)，" target="_blank" rel="noopener">http://pkg.jenkins-ci.org/redhat/)，</a></p>
<p>   原先现在2.5版本以上，版本太高，启动报“java.lang.UnsupportedClassVersionError”错，所以要卸载之前安装的jenkins-2.54-1.1.noarch,使用如下命令</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"># 卸载原先高版本的jenkins</span><br><span class="line">rpm -e nodeps jenkins-2.54-1.1.noarch</span><br></pre></td></tr></table></figure>
<h3 id="2-3-2-安装jenkins"><a href="#2-3-2-安装jenkins" class="headerlink" title="2.3.2 安装jenkins"></a>2.3.2 安装jenkins</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"># 下载jenkins-2.33-1.1.noarch.rpm</span><br><span class="line">wget http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm</span><br><span class="line">#安装jenkins-2.33-1.1.noarch.rpm</span><br><span class="line">sudo rpm -ih jenkins-2.33-1.1.noarch.rpm</span><br></pre></td></tr></table></figure>
<p>出现如下图 </p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170714123028884-832349549.png" alt="1"></p>
<p>表示安装成功，安装成功会自动生成下面文件：  </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">/usr/lib/jenkins/jenkins.war            #WAR包 </span><br><span class="line">/etc/sysconfig/jenkins                  #配置文件</span><br><span class="line">/var/lib/jenkins/                       #默认的JENKINS_HOME目录</span><br><span class="line">/var/log/jenkins/jenkins.log            #Jenkins日志文件</span><br></pre></td></tr></table></figure>
<h2 id="2-4-启动"><a href="#2-4-启动" class="headerlink" title="2.4 启动"></a>2.4 启动</h2><p>启动用如下命令：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo service jenkins start</span><br></pre></td></tr></table></figure>
<p> 报了如下错误： </p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170714123307462-966368924.png" alt="1"></p>
<p>会报这个错误，这是由于没有配置java环境，有两种方法可以解决： </p>
<h3 id="2-4-1-安装jdk环境"><a href="#2-4-1-安装jdk环境" class="headerlink" title="2.4.1 安装jdk环境"></a><strong>2.4.1 安装jdk环境</strong></h3><p>　　先检查一下java虚拟机有没有安装，如果没有就安装</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java --version</span><br></pre></td></tr></table></figure>
<h3 id="2-4-2-在jenkins配置文件中配置"><a href="#2-4-2-在jenkins配置文件中配置" class="headerlink" title="2.4.2 在jenkins配置文件中配置"></a><strong>2.4.2 在jenkins配置文件中配置</strong></h3><p>　　需要“vi /etc/init.d/jenkins”，把jdk路径加上，如下：</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"># Search usable Java as /usr/bin/java might not point to minimal version required by Jenkins.</span><br><span class="line"># see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html</span><br><span class="line">candidates=&quot;</span><br><span class="line">/etc/alternatives/java</span><br><span class="line">/usr/lib/jvm/java-1.8.0/bin/java</span><br><span class="line">/usr/lib/jvm/jre-1.8.0/bin/java</span><br><span class="line">/usr/lib/jvm/java-1.7.0/bin/java</span><br><span class="line">/usr/lib/jvm/jre-1.7.0/bin/java</span><br><span class="line">/usr/bin/java</span><br><span class="line">/home/lutong/soft/jdk1.7.0_76/bin/java</span><br><span class="line">&quot;</span><br><span class="line">for candidate in $candidates</span><br><span class="line">do</span><br><span class="line">  [ -x &quot;$JENKINS_JAVA_CMD&quot; ] &amp;&amp; break</span><br><span class="line">  JENKINS_JAVA_CMD=&quot;$candidate&quot;</span><br><span class="line">done</span><br><span class="line"></span><br><span class="line">JAVA_CMD=&quot;$JENKINS_JAVA_CMD $JENKINS_JAVA_OPTIONS -DJENKINS_HOME=$JENKINS_HOME -jar $JENKINS_WAR&quot;</span><br><span class="line">PARAMS=&quot;--logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon&quot;</span><br></pre></td></tr></table></figure>
<p>上述配置文件中红色加粗字体的内容是我配置自己的jdk路径。由于我的系统中的java是自己解压安装的，所以我采用了第二种方式</p>
<p>再次启动jenkins:</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170714124223728-1077236899.png" alt="2"></p>
<h1 id="三、默认配置修改及初始化"><a href="#三、默认配置修改及初始化" class="headerlink" title="三、默认配置修改及初始化"></a>三、默认配置修改及初始化</h1><h2 id="3-1-修改配置文件"><a href="#3-1-修改配置文件" class="headerlink" title="3.1 修改配置文件"></a>3.1 修改配置文件</h2><p>上面我们有提到配置文件是/etc/sysconfig/jenkins，修改如下两项配置（根据实际需要设置）  </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">#修改为18080，默认是8080</span><br><span class="line">JENKINS_PORT=&quot;18080&quot;</span><br><span class="line">#内存设置，我这里设置成如下配置</span><br><span class="line">JENKINS_JAVA_OPTIONS=&quot;-Djava.awt.headless=true -Xms512m -Xmx1024m -XX:MaxNewSize=512m -XX:MaxPermSize=1024m&quot;</span><br></pre></td></tr></table></figure>
<h2 id="3-2-初始化"><a href="#3-2-初始化" class="headerlink" title="3.2 初始化"></a>3.2 初始化</h2><ul>
<li>在浏览器中输入172.16.7.109:8080/jenkins（默认是使用8080端口）</li>
</ul>
<p>打开jenkins的后台控制页面</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716214358128-205148242.png" alt="1"></p>
<p>初始化成功后会自动生成一个管理员密码放到指定位置，根据页面提示复制密码粘贴到输入框就可以登录了</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170714141717822-622133511.png" alt="1"></p>
<h2 id="3-3-初始化安装插件"><a href="#3-3-初始化安装插件" class="headerlink" title="3.3 初始化安装插件"></a>3.3 初始化安装插件</h2><ul>
<li><p>登录成功后回让你选择插件的安装，可以选择建议的安装也可以自己进行选择，不清楚的话可以使用建议的安装</p>
<p>由于建议安装的插件比较多，安装的过程有点慢，多等待一会</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170714142045509-1995538133.png" alt="1"></p>
<ul>
<li><p>由于建议安装的插件比较多，安装的过程有点慢，多等待一会</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170714142118337-693339373.png" alt="2"></p>
</li>
</ul>
<p>安装的过程也可能因为网络等一些原因安装会失败，现在可以无视它，点击Continue，后面再进行手动的安装 </p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/2016-12-21%20at%2011.30.jpeg" alt="2"></p>
<ul>
<li>安装完成</li>
<li>安装完成后最好新创建一个管理员账户代替之前的临时自动生成的密码账户</li>
<li>创建新的管理员账户</li>
</ul>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716155929660-803327139%20%281%29.png" alt="2"></p>
<p>初始化完成，进入后台管理界面 </p>
</li>
</ul>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716214545582-1050555026.png" alt="2"></p>
<p>  初始化完成 </p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/2016-12-21%20at%2011.322.jpeg" alt="2"></p>
<p>  后台管理界面</p>
<h2 id="3-4-初始化配置"><a href="#3-4-初始化配置" class="headerlink" title="3.4 初始化配置"></a><strong>3.4</strong> <strong>初始化配置</strong></h2><h3 id="3-4-1-修改工作空间"><a href="#3-4-1-修改工作空间" class="headerlink" title="3.4.1 修改工作空间"></a><strong>3.4.1 修改工作空间</strong></h3><p>  从主页面直接到“系统管理&gt;系统配置”，点击右边“高级”按钮</p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183333035-55092743.png" alt="1"></p>
<p>  在工作空间目录”直接修改默认工作空间目录为自定义的/home/jenkins/workspace/${ITEM_FULLNAME}，如下图： </p>
<h3 id="3-4-2-全局配置ant"><a href="#3-4-2-全局配置ant" class="headerlink" title="3.4.2 全局配置ant"></a><strong>3.4.2 全局配置ant</strong></h3><p>  从主页面直接到“系统管理&gt;Global Tool Configuration”，点击右边“Ant安装”按钮，</p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183351956-101901026.png" alt="1"></p>
<p>  在name中填入名字，可以自己取，这里我填写成ant(到时Invoke Ant时，需要选择ant),ANT_HOME填入Ant的环境变量 </p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183427175-1360645386.png" alt="1"></p>
<p>   <strong>3.4.3</strong> <strong>全局**</strong>配置JDK**</p>
<p>  从主页面直接到“系统管理&gt;Global Tool Configuration”，点击右边“JDK安装”按钮，</p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183417347-1561858092.png" alt="1"></p>
<p>   在name中填入名字，可以自己取，这里我填写成ant(到时Invoke Ant时，需要选择ant),ANT_HOME填入Ant的环境变量 </p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183451988-1617162197.png" alt="1"></p>
<h3 id="3-4-4-配置Credentials"><a href="#3-4-4-配置Credentials" class="headerlink" title="3.4.4 配置Credentials"></a><strong>3.4.4 配置Credentials</strong></h3><p>  这里主要是添加信任证书，因为我的工程的源码是放在SVN上，所以在这里我们就是要添加SVN的验证，即SVN的用户名和密码。</p>
<p>  从主页面左边菜单点击到“Credentials”，进入到 Credentials列表，如图所示：</p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183509956-1082587330.png" alt="2"></p>
<p>  点击Name列中即可对Credentials中用户进行修改、新增、删除操作，如下图所示：</p>
<p>  <img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183525269-154596904.png" alt="1"></p>
<p>  修改完后，点击下面“Save”保存按钮即可 </p>
<h1 id="四、建立-Jenkins-自动化持续集成项目"><a href="#四、建立-Jenkins-自动化持续集成项目" class="headerlink" title="四、建立 Jenkins 自动化持续集成项目"></a>四、建立 Jenkins 自动化持续集成项目</h1><h2 id="4-1-安装插件"><a href="#4-1-安装插件" class="headerlink" title="4.1 安装插件"></a>4.1 安装插件</h2><h3 id="4-1-1-常用插件"><a href="#4-1-1-常用插件" class="headerlink" title="4.1.1 常用插件"></a>4.1.1 常用插件</h3><p>  一般情况下，常使用到如下这些插件：</p>
<ul>
<li><strong>FindBugs Plug-in</strong>： 是一个静态分析工具，它检查类或者 JAR 文件，将字节码与一组缺陷模式进行对 比以发现可能的问题。</li>
<li><strong>Checkstyle Plug-in</strong>：是一个静态分析工具，检查Java程序代码。</li>
<li><strong>Deploy to container Plugin</strong>：用于构建项目后，自动发布war包重新部署的插件</li>
<li><strong>SSH Plugin</strong>：这个插件使用 SSH 协议执行远程 shell 命令。</li>
<li><p><strong>Multijob Plugin</strong>：这个插件是一个将多个项目连接在一起的插件。</p>
<h3 id="4-1-2-安装步骤"><a href="#4-1-2-安装步骤" class="headerlink" title="4.1.2 安装步骤"></a>4.1.2 安装步骤</h3><p>　　下面以安装<strong>Checkstyle</strong>插件为例进行说明:</p>
<p>在左上角“<strong>系统管理</strong>”中往下拉,找到<strong>“管理插件”</strong>点击进去就可以查看和管理所有的插件，点击“可选插件”显示所有jenkins支持的插件，在右上角的“过滤”输入框中，输入需要安装的插件名就可以筛选查找到想要的插件</p>
</li>
</ul>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717183427175-1360645386.png" alt="1"></p>
<p>  然后切换到“可选插件”，在右上角“过滤”框中输入checkstyle，查询结果如下</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161820753-249838500.png" alt="1"></p>
<p>然后，点击“直接安装”按钮，其他插件也是这样的安装方式！  </p>
<h2 id="4-2-建立项目"><a href="#4-2-建立项目" class="headerlink" title="4.2 建立项目"></a><strong>4.2</strong> <strong>建立项目</strong></h2><h3 id="4-2-1-新建项目"><a href="#4-2-1-新建项目" class="headerlink" title="4.2.1 新建项目"></a><strong>4.2.1 新建项目</strong></h3><p>下面以建立一个自由风格软件项目为例进行说明</p>
<ul>
<li>点击左侧边栏的“新建”按钮，新建一个任务。</li>
<li>填写项目的名称，并选择一种构建的方式，此时我们选择第一个，构建一个自由风格的软件项目，然后点击“OK”按钮创建任务，并进行详细的配置</li>
</ul>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716160850519-1650103209.png" alt="1"></p>
<p>然后就会进行到下面这个配置页面</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716160935878-992287442.png" alt="1"></p>
<p>接下来，我从<strong>General**</strong>、源码管理、构建触发器、构建环境、构建、构建后操作**这几个部分来进行详细配置说明 </p>
<h3 id="4-2-2-General"><a href="#4-2-2-General" class="headerlink" title="4.2.2 General"></a><strong>4.2.2 General</strong></h3><p>​    这部分主要是设置下名称、工作空间等。</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161034222-53368878.png" alt="1"></p>
<p>第一步，点击高级按钮; 第二步，勾选“自定义工作空间”，输入工作空间路径; </p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161159160-1872856235.png" alt="1"></p>
<p>若是只有一个项目，也可以直接到“系统管理&gt;系统配置&gt;工作空间目录”直接修改默认工作空间目录，如下图：</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161220847-1522363124.png" alt="1"></p>
<h3 id="4-2-3-源码管理"><a href="#4-2-3-源码管理" class="headerlink" title="4.2.3 源码管理"></a>4.2.3 源码管理</h3><p>　　因为，我们的代码是部署在SVN服务器上的，所以这里有下面三个步骤来配置jenkins监控SVN服务器代码变化。<br>第一步，选择Subversion；<br>第二步，在Repository URL输入项目SVN地址；</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161314050-1040331419.png" alt="1"></p>
<p>第三步，在Credentials选择SVN用户名和账号，初次会需要点击Add添加，如下。</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161341050-664320142.png" alt="1"></p>
<h3 id="4-2-4-构建触发器"><a href="#4-2-4-构建触发器" class="headerlink" title="4.2.4 构建触发器"></a>4.2.4 构建触发器</h3><p>指定的项目完成构建后，触发此项目的构建。</p>
<ul>
<li><strong>Poll SCM</strong>：当选择此选项，您可以指定一个定时作业表达式来定义Jenkins每隔多久检查一下源代码    仓库的变化。如果发现变化，就执行一次构建。例如，表达式中填写H 2 <em> </em> *将使Jenkins每    隔2分                  钟就检查一次源码仓库的变化。</li>
<li><strong>Build periodically</strong>：此选项仅仅通知Jenkins按指定的频率对项目进行构建，而不管SCM是否有变化。 如果想在这个Job中运行一些测试用例的话，它就很有帮助。</li>
</ul>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716161853144-1435846665.png" alt="1"></p>
<h3 id="4-2-6-构建"><a href="#4-2-6-构建" class="headerlink" title="4.2.6 构建"></a><strong>4.2.6</strong> <strong>构建</strong></h3><p>　    <strong>这部分主要是配置构建的相关内容，用于定时触发构建或者手动执行构建的时候，对代码检验、编译时进行的操作。**</strong>构建**概念到处可查到，形象来说，构建就是要把代码从某个地方拷贝过来，编译，再拷贝到某个地方去等等操作，当然不仅与此，但是主要用来干这个。</p>
<p>因为我的项目是用ant脚本实现的编译和打包，所以我选择的是Invoke Ant，Ant Version选择我Ant配置的那个名字（这里可以参见3.4.2），注意不要选择default喔，那个选择了没有用。</p>
<ul>
<li><strong>增加构建步骤:Invoke Ant</strong></li>
<li>Targets：(什么也没写，默认执行根目录下的build.xml)</li>
</ul>
<p>如果你的构建脚本build.xml不在workspace根目录、或者说你的构建脚本不叫build.xml。那么需要在高级里设置Build File选项的路</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162022285-1737582130.png" alt="1"></p>
<p>build.xml配置文件请查看附件“build.xml说明”，里面有每句配置说明;</p>
<p>checkstyleBuild.xml配置文件请查看附件“checkstyleBuild.xml说明”，里面有每句配置说明;</p>
<p>findBugsBuild.xml配置文件请查看附件“findBugsBuild.xml说明”，里面有每句配置说明</p>
<h3 id="4-2-7-构建后操作"><a href="#4-2-7-构建后操作" class="headerlink" title="4.2.7 构建后操作"></a>4.2.7 构建后操作</h3><p>　　用于定义当前项目构建完之后的一些操作，比如构建完之后将checkstyle结果输出到指定日志文件，重新发布项目，去执行其他项目构建等。</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162207113-850922877.png" alt="1"></p>
<p><strong>4.2.7.1</strong> <strong>构建后发布项目</strong></p>
<p>​           注意，首先你必须安装好<a href="https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin" target="_blank" rel="noopener">Deploy Plugin</a>插件，然后在tomcat的conf目录配置tomcat-users.xml文件，如我这里配置的是manager, 在<tomcat-users>节点里添加如下内容:</tomcat-users></p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162406394-2105747705.png" alt="1"></p>
<p>配置完之后一次war包路径、用户名、密码、主机即可</p>
<p>​      配置完之后一次war包路径、用户名、密码、主机即可</p>
<p>​      参数说明：</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162511878-1693704711.png" alt="1"></p>
<ul>
<li><strong>WAR/EAR files</strong>：war文件的存放位置，如：**/build/warDest/ad-gx-admin.war。</li>
<li>l <strong>Context path</strong>：访问时需要输入的内容，如ad-gx-admin访问时如下：     <a href="http://172.16.4.166:10001/" target="_blank" rel="noopener">http://172.16.4.166:10001/</a> ofCard/ad-gx-admin如果为空，默认是war包的名字。</li>
<li>l <strong>Container</strong>：选择你的web容器，如tomca 7.x</li>
<li>l <strong>Manager user nam</strong>e：填入tomcat-users.xml配置的username内容</li>
<li>l <strong>Manager password</strong>：填入tomcat-users.xml配置的password内容</li>
<li>l <strong>Tomcat URL</strong>：填入<a href="http://192.168.x.x:8080/" target="_blank" rel="noopener">http://192.168.x.x:8080/</a> ;这个是你的服务器tomcat启动后访问的路径</li>
<li><p>l <strong>Deploy on failure</strong>：构建失败依然部署，一般不选择</p>
<p>　　注意：虽然这种部署方法可能会导致tomcat加载时出现卡死的现象。但是也是最简单的部署方式。如果卡死了重启下就好了，将tomcat的java内存参数调高可以解决这个问题。</p>
</li>
</ul>
<p>最后不要忘记点击保存喔。</p>
<p>好了！到此一个项目的获取源码，打包，远程部署</p>
<p><strong>4.2.7.2**</strong>构建后发布静态结果**</p>
<p>　　输入配置文件</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162445566-315786576.png" alt="1"></p>
<p>checkstyle-result.xml配置文件请查看附件“checkstyle-result.xml说明”，里面有配置说明。</p>
<p><strong>*所有这些配置多做完之后，在最下方点击“保存”按钮，现在回到首页去进行构建吧！！！*</strong></p>
<h2 id="4-3-监控"><a href="#4-3-监控" class="headerlink" title="4.3 监控"></a><strong>4.3 监控</strong></h2><h3 id="4-3-1-主页面介绍"><a href="#4-3-1-主页面介绍" class="headerlink" title="4.3.1 主页面介绍"></a><strong>4.3.1</strong> <strong>主页面介绍</strong></h3><p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184406503-1744205535.png" alt="2"></p>
<p><strong>1、左边菜单栏</strong></p>
<ul>
<li>l <strong>新建</strong>：这里进入新建项目。</li>
<li>l <strong>用户</strong>：用户管理模块，对监控系统用户的增删改查。</li>
<li>l <strong>任务历史</strong>：以往构建过的项目。</li>
<li>l <strong>系统管理</strong>：进去是一些配置方面的东西，进入之后几个主要的子菜单分别是<a href="http://172.16.4.166:18080/configure" target="_blank" rel="noopener">系统设置</a> 、<a href="http://172.16.4.166:18080/configureTools" target="_blank" rel="noopener">Global Tool    Configuration</a> 、<a href="http://172.16.4.166:18080/pluginManager" target="_blank" rel="noopener">管理插件</a> 几个模块</li>
<li>l <strong>My Views</strong>:当前监控的项目列表。</li>
<li>l <strong>Credentials</strong>:添加监控源码的的证书，其实就是SVN用户名和密码验证。</li>
</ul>
<p><strong>2、监控项目列表</strong></p>
<p> 这里主要是Jenkins当前正在监控的项目列表。点击进去可查看当前项目详细情况</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184427503-815120918.png" alt="1"></p>
<p><strong>模块1：</strong></p>
<ul>
<li>l <strong>状态</strong>：最后一次构建的状态；</li>
<li>l <strong>修改记录</strong>：代码修改记录；</li>
<li>l <strong>工作空间</strong>：编译后代码存放的目录；</li>
<li>l <strong>立即构建</strong>：单击此处，可立即进行构建；</li>
<li>l <strong>删除Projec</strong>t:单击此处，可删除该项目；</li>
<li>l <strong>配置</strong>：配置该项目相关监控信息（工作空间、chestyle规则等）；</li>
<li>l <strong>Checkstyle Warnings</strong>：当前这次构建发现的静态警告；</li>
<li>l <strong>FindBugs Warnings</strong>：当前这次构建发现的FindBugs。</li>
</ul>
<p><strong>模块2：</strong></p>
<ul>
<li>这里显示的最近一次构建的相关信息，是否构建成功、构建用时等<strong>。</strong></li>
</ul>
<p><strong>模块3：</strong></p>
<ul>
<li>l <strong>Checkstyle Trend:</strong>历史构建完之后的解决的代码中静态警告走势；</li>
<li>l <strong>FindBus Trend</strong>:历史构建完之后的解决的代码中FindBugs走势</li>
</ul>
<h3 id="4-3-2-构建状态查询"><a href="#4-3-2-构建状态查询" class="headerlink" title="4.3.2 构建状态查询"></a><strong>4.3.2</strong> <strong>构建状态查询</strong></h3><p> 当任务一旦运行，您将会看到这个任务正在队列中的仪表板和当前工作主页上运行。这两种显示如下。</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184506628-497720938.png" alt="2"></p>
<p>一旦构建完成后，完成后的任务将会构建历史列表显示。</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184524300-1439112462.png" alt="2"></p>
<p>当然你可以在Jenkins的主控制面板上看到它，如下图。</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184604081-115536023.png" alt="2"></p>
<p>在上面展示的截图中，您将注意到有两个图标描述当前作业的状态。S栏目代表着“最新构建状态”，W栏目代表着“构建稳定性”。Jenkins使用这两个概念来介绍一个作业的总体状况：</p>
<p><strong>1**</strong>、<strong>**构建状态</strong>:</p>
<p>​        下图中分级符号概述了一个Job新近一次构建会产生的四种可能的状态： </p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184635628-2001157301.png" alt="1"></p>
<ul>
<li>Successful:完成构建，且被认为是稳定的。</li>
<li>Unstable:完成构建，但被认为不稳定。</li>
<li>Failed:构建失败。</li>
<li>Disabled:构建已禁用。</li>
</ul>
<p><strong>2**</strong>、<strong>**构建稳定性</strong>:</p>
<p>​        当一个Job中构建已完成并生成了一个未发布的目标构件，如果您准备评估此次构建的稳定性，Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 )，这些任务一般以插件的方式实现。它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。分数越高，表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。</p>
<p>当前作业主页上还包含了一些有趣的条目。左侧栏的链接主要控制Job的配置、删除作业、构建作业。右边部分的链接指向最新的项目报告和构件。</p>
<p>通过点击构建历史（Build History）中某个具体的构建链接，就能跳转到Jenkins为这个构建实例而创建的构建主页上。如下图：</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170716162207113-850922877.png" alt="2"></p>
<p> 如果你想通过视图输出界面来监控当前任务的进展情况。你可以单击Console Output（控制台输出）。如</p>
<p> 果工作已完成，这将显示构建脚本产生的静态输出；如果作业仍然在运行中，Jenkins将不断刷新网页的内容，以便您可以看到它运行时的输出。如下图：</p>
<p><img src="http://p1aoqp63y.bkt.clouddn.com/847059-20170717184736503-1575925022.png" alt="2"></p>
<h1 id="五、常见错误处理"><a href="#五、常见错误处理" class="headerlink" title="五、常见错误处理"></a><strong>五、常见错误处理</strong></h1><h2 id="5-1-java-lang-UnsupportedClassVersionError"><a href="#5-1-java-lang-UnsupportedClassVersionError" class="headerlink" title="5.1 java.lang.UnsupportedClassVersionError"></a><strong>5.1</strong> <strong>java.lang.UnsupportedClassVersionError</strong></h2><p>这是因为jenkins和jdk版本不对应引起的。我这里用的是jdk1.7，所以下载版本<a href="http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm" target="_blank" rel="noopener">http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm</a>(jenkins下载地址：<a href="http://pkg.jenkins-ci.org/redhat/)，" target="_blank" rel="noopener">http://pkg.jenkins-ci.org/redhat/)，</a>   原先现在2.5版本以上，版本太高，启动报“java.lang.UnsupportedClassVersionError”错，所以要卸载之前安装的jenkins-2.54-1.1.noarch,使用如下命令</p>
<h2 id="5-2-command-execution-failed-Maybe-you-need-to-configure-the-job-to-choose-one-of-your-Ant-installations"><a href="#5-2-command-execution-failed-Maybe-you-need-to-configure-the-job-to-choose-one-of-your-Ant-installations" class="headerlink" title="5.2 command execution failed.Maybe you need to configure the job to choose one of your Ant installations?"></a><strong>5.2</strong> <strong>command execution failed.Maybe you need to configure the job to choose one of your Ant installations?</strong></h2><p><strong>“</strong></p>
<p>Started by user <a href="http://172.16.8.104:18080/user/admin" target="_blank" rel="noopener">admin</a></p>
<p>[EnvInject] - Loading node environment variables.</p>
<p>Building in workspace /home/jenkins/workspace/My_cache</p>
<p>Updating <a href="https://219.134.132.59/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache" target="_blank" rel="noopener">https://ip地址/svn/iptv/新业务/广西开机广告/code/ad-gx-cache</a> at revision ‘2017-07-17T14:14:11.377 +0800’</p>
<p>Using sole credentials hehaitao/<strong>**</strong> in realm ‘&lt;<a href="https://219.134.132.59/" target="_blank" rel="noopener">https://ip地址:443</a>&gt; VisualSVN Server’</p>
<p>At revision 68144</p>
<p>No changes for <a href="https://219.134.132.59/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache" target="_blank" rel="noopener">https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache</a> since the previous build</p>
<p>[workspace] <strong>$ ant -file checkstyleBuild.xml -DBUILD_NUMBER=8</strong></p>
<p><strong>ERROR: command execution failed.Maybe you need to configure the job to choose one of your Ant installations?</strong></p>
<p>[CHECKSTYLE] Skipping publisher since build result is FAILURE</p>
<p>[FINDBUGS] Skipping publisher since build result is FAILURE</p>
<p>Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered</p>
<p>Finished: FAILURE</p>
<p><strong>”</strong></p>
<p>　　这是由于没有成功全局配置ant的环境变量没有配置成功导致，请确保环境Ant环境变量配置成功，并且在Global Tool Configuration正确添加了Ant的路径，这个可以参见2.2及3.4.2</p>
<h2 id="5-3-JAVA-HOME-is-not-defined-correctly"><a href="#5-3-JAVA-HOME-is-not-defined-correctly" class="headerlink" title="5.3 JAVA_HOME is not defined correctly."></a><strong>5.3</strong> <strong>JAVA_HOME is not defined correctly.</strong></h2><p><strong>“</strong></p>
<p><strong><img src="https://images2015.cnblogs.com/blog/847059/201707/847059-20170717185032800-1945978892.png" alt="img">控制台输出</strong></p>
<p>Started by user <a href="http://172.16.8.104:18080/user/admin" target="_blank" rel="noopener">admin</a></p>
<p>[EnvInject] - Loading node environment variables.</p>
<p>Building in workspace /home/jenkins/workspace/My_cache</p>
<p>Updating <a href="https://219.134.132.59/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache" target="_blank" rel="noopener">https://ip地址/svn/iptv/新业务/广西开机广告/code/ad-gx-cache</a> at revision ‘2017-07-17T15:33:26.714 +0800’</p>
<p>Using sole credentials hehaitao/<strong>**</strong> in realm ‘&lt;<a href="https://219.134.132.59/" target="_blank" rel="noopener">https://ip地址:443</a>&gt; VisualSVN Server’</p>
<p>At revision 68151</p>
<p>[workspace] $ /home/lutong/apache-ant-1.9.9/bin/ant -file checkstyleBuild.xml -DBUILD_NUMBER=11</p>
<p><strong>Error: JAVA_HOME is not defined correctly.</strong></p>
<p>  <strong>We cannot execute java</strong></p>
<p>Build step ‘Invoke Ant’ marked build as failure</p>
<p>[CHECKSTYLE] Skipping publisher since build result is FAILURE</p>
<p>[FINDBUGS] Skipping publisher since build result is FAILURE</p>
<p>Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered</p>
<p>Finished: FAILURE</p>
<p><strong>”</strong></p>
<p> <em>这是由于没有成功全局配置JDK的环境变量没有配置成功导致，请确保环境Ant环境变量配置成功，并且在Global Tool Configuration添加的JDK路径正确，这个可以参见2.4.1及3.4.3</em></p>
<h2 id="5-3-Unable-to-access-the-repository"><a href="#5-3-Unable-to-access-the-repository" class="headerlink" title="5.3 Unable to access the repository"></a><strong>5.3</strong> <strong>Unable to access the repository</strong></h2><p>在配置“源码管理”时，如果Credentials 不选择或者选择了验证不正确，会出现这个错误，请参见3.4.4及4.2.3</p>
<h2 id="5-4-can-’-t-create-file"><a href="#5-4-can-’-t-create-file" class="headerlink" title="5.4 can**’**t create file"></a><strong>5.4</strong> <strong>can**</strong>’<strong>**t create file</strong></h2><p><strong>“</strong></p>
<p>Checking out <a href="https://219.134.132.59/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache" target="_blank" rel="noopener">https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache</a> at revision ‘2017-07-17T17:46:17.618 +0800’</p>
<p>Using sole credentials hehaitao/<strong>**</strong> in realm ‘&lt;<a href="https://219.134.132.59/" target="_blank" rel="noopener">https://ip地址:443</a>&gt; VisualSVN Server’</p>
<p>ERROR: Failed to check out <a href="https://219.134.132.59/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache" target="_blank" rel="noopener">https://ip地址/svn/iptv/新业务/广西开机广告/code/ad-gx-cache</a></p>
<p><a href="http://stacktrace.jenkins-ci.org/search?query=org.tmatesoft.svn.core.SVNException" target="_blank" rel="noopener">org.tmatesoft.svn.core.SVNException</a>: svn: E204899: Cannot create new file <strong>‘/home/jenkins/workspace/**</strong>广西开机广告<strong>**/.svn/lock’: 权限不够</strong></p>
<p>No changes for <a href="https://219.134.132.59/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache" target="_blank" rel="noopener">https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache</a> since the previous build</p>
<p><strong>”</strong></p>
<p>  这是由于 项目“广西开机广告”目录的权限不够，使用“chmod777 /home/jenkins/workspace/广西开机广告 ”即可</p>
<p><strong>附件：</strong></p>
<p><strong>*附件一：build.xml说明*</strong></p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; standalone=&quot;no&quot;?&gt;</span><br><span class="line">&lt;!-- 指明xml版本，编码格式为UTF-8 --&gt;</span><br><span class="line">&lt;!-- basedir故名思意就是工作的根目录 .代表当前目录。default代表默认要做的事情。 --&gt;</span><br><span class="line">&lt;project basedir=&quot;.&quot; default=&quot;war&quot; name=&quot;ad-gx-admin&quot;&gt;</span><br><span class="line">    &lt;!--</span><br><span class="line">property类似定义程序中的变量，name是变量名，value是变量值，在下文中可以通过$&#123;src&#125;和$&#123;webroot&#125;取得变</span><br><span class="line">量的值 --&gt;</span><br><span class="line">    &lt;property name=&quot;src&quot; value=&quot;src&quot; /&gt;</span><br><span class="line">    &lt;property name=&quot;webroot&quot; value=&quot;WebContent&quot; /&gt;</span><br><span class="line">    &lt;property name=&quot;lib&quot; value=&quot;$&#123;webroot&#125;/WEB-INF/lib&quot; /&gt;</span><br><span class="line">    &lt;property name=&quot;classes&quot; value=&quot;build/classes&quot; /&gt;</span><br><span class="line">    &lt;property name=&quot;warDest&quot; value=&quot;build/warDest&quot; /&gt;</span><br><span class="line">    &lt;property name=&quot;Bulid_Number&quot; value=&quot;warDest&quot; /&gt;</span><br><span class="line">    &lt;!-- target,即一个任务，它有一个名字，depends是它所依赖的target，</span><br><span class="line">在执行这个targe，例如这里的init之前ant会先检查clean是否曾经被执行过，</span><br><span class="line">如果执行过则直接直接执行init，如果没有则会先执行它依赖的target --&gt;</span><br><span class="line">    &lt;target name=&quot;init&quot; depends=&quot;clean&quot;&gt;</span><br><span class="line">        &lt;!-- 创建编译后文件存放目录、war包存放目录 --&gt;</span><br><span class="line">        &lt;mkdir dir=&quot;$&#123;classes&#125;&quot; /&gt;</span><br><span class="line">        &lt;mkdir dir=&quot;$&#123;warDest&#125;&quot; /&gt;</span><br><span class="line">        &lt;!-- 指定jar包的目录，下面直接通过$&#123;classpath&#125;可以取得jar路径 --&gt;</span><br><span class="line">        &lt;path id=&quot;classpath&quot;&gt;</span><br><span class="line">            &lt;fileset dir=&quot;$&#123;lib&#125;&quot;&gt;</span><br><span class="line">                &lt;include name=&quot;**/*.jar&quot; /&gt;</span><br><span class="line">            &lt;/fileset&gt;</span><br><span class="line">        &lt;/path&gt;</span><br><span class="line">        &lt;!-- 该任务主要用来对文件和目录的复制功能,即将./$&#123;src&#125;和./$&#123;webroot&#125;目录下</span><br><span class="line">include指定的文件拷贝到./$&#123;classes&#125;目录下。额外说明：exclude表示排除的文件 --&gt;</span><br><span class="line">        &lt;copy todir=&quot;./$&#123;classes&#125;&quot;&gt;</span><br><span class="line">            &lt;fileset dir=&quot;./$&#123;src&#125;&quot;&gt;</span><br><span class="line">                &lt;include name=&quot;**/*.properties&quot; /&gt;</span><br><span class="line">                &lt;include name=&quot;**/*.xml&quot; /&gt;</span><br><span class="line">                &lt;include name=&quot;**/*.dtd&quot; /&gt;</span><br><span class="line">                &lt;include name=&quot;**/*.json&quot; /&gt;</span><br><span class="line">                &lt;include name=&quot;**/*.vm&quot; /&gt;</span><br><span class="line">            &lt;/fileset&gt;</span><br><span class="line">            &lt;fileset dir=&quot;./$&#123;webroot&#125;&quot;&gt;</span><br><span class="line">                &lt;include name=&quot;resource/&quot; /&gt;</span><br><span class="line">            &lt;/fileset&gt;</span><br><span class="line">        &lt;/copy&gt;</span><br><span class="line">    &lt;/target&gt;</span><br><span class="line">    &lt;target name=&quot;clean&quot;&gt;</span><br><span class="line">        &lt;!-- 该任务的作用是根据日志或监控器的级别输出信息。它包括message、file、append和level四个属性 -</span><br><span class="line">-&gt;</span><br><span class="line">&lt;echo &gt;$&#123;warDest&#125;&lt;/echo&gt;</span><br><span class="line">&lt;!== 对文件或目录进行删除,这里是删除$&#123;warDest&#125;和$&#123;classes&#125;目录 --&gt;</span><br><span class="line">        &lt;delete dir=&quot;$&#123;warDest&#125;&quot; /&gt;</span><br><span class="line">        &lt;delete dir=&quot;$&#123;classes&#125;&quot; /&gt;</span><br><span class="line">    &lt;/target&gt;</span><br><span class="line">    &lt;target name=&quot;complie&quot; depends=&quot;init&quot;&gt;</span><br><span class="line">        &lt;!-- 编译:将srcdir目录的源码，编译后放到destdir目录下,refid表示关联的jar包 --&gt;</span><br><span class="line">        &lt;javac srcdir=&quot;$&#123;src&#125;&quot; destdir=&quot;$&#123;classes&#125;&quot; debug=&quot;true&quot; debuglevel=&quot;lines,vars,source&quot; encoding=&quot;UTF-8&quot;&gt;</span><br><span class="line">            &lt;classpath refid=&quot;classpath&quot; /&gt;</span><br><span class="line">        &lt;/javac&gt;</span><br><span class="line">    &lt;/target&gt;</span><br><span class="line">    &lt;target name=&quot;war&quot; depends=&quot;complie&quot;&gt;</span><br><span class="line">        &lt;war warfile=&quot;$&#123;warDest&#125;/ad-gx-admin.war&quot; webxml=&quot;$&#123;webroot&#125;/WEB-INF/web.xml&quot;&gt;</span><br><span class="line">            &lt;lib dir=&quot;$&#123;lib&#125;&quot; /&gt;</span><br><span class="line">            &lt;classes dir=&quot;$&#123;classes&#125;&quot; /&gt;</span><br><span class="line">            &lt;fileset dir=&quot;./$&#123;webroot&#125;&quot;&gt;</span><br><span class="line">                &lt;include name=&quot;**/**&quot; /&gt;</span><br><span class="line">                &lt;exclude name=&quot;META-INF/**&quot; /&gt;</span><br><span class="line">                &lt;exclude name=&quot;WEB-INF/classes/**&quot; /&gt;</span><br><span class="line">                &lt;exclude name=&quot;WEB-INF/lib/**&quot; /&gt;</span><br><span class="line">            &lt;/fileset&gt;</span><br><span class="line">        &lt;/war&gt;</span><br><span class="line">    &lt;/target&gt;</span><br><span class="line">&lt;/project&gt;</span><br></pre></td></tr></table></figure>
<p> <strong>*附件二：checkstyle-result.xml说明*</strong></p>
 <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;</span><br><span class="line">&lt;project name=&quot;checkstyle&quot; default=&quot;checkstyle&quot; basedir=&quot;.&quot;&gt;</span><br><span class="line">    &lt;!-- 检查源码的路径 --&gt;</span><br><span class="line">    &lt;target name=&quot;init&quot;&gt;</span><br><span class="line">        &lt;tstamp /&gt;</span><br><span class="line">        &lt;!-- 输出报告的路径  --&gt;</span><br><span class="line">        &lt;property name=&quot;project.dir&quot; value=&quot;/home/jenkins/workspace/广西开机广告项目/checkstyle_report&quot; /&gt;</span><br><span class="line">        &lt;property name=&quot;project.checkstyle.report.dir&quot; value=&quot;$&#123;project.dir&#125;/$&#123;BUILD_NUMBER&#125;&quot; /&gt;</span><br><span class="line">        &lt;property name=&quot;project.checkstyle.result.name&quot; value=&quot;checkstyle-result.xml&quot; /&gt;</span><br><span class="line">        &lt;property name=&quot;project.checkstyle.report.name&quot; value=&quot;checkstyle-report.html&quot; /&gt;</span><br><span class="line">        &lt;!-- 检测规则存放路径  --&gt;</span><br><span class="line">        &lt;property name=&quot;checkstyle.config&quot; value=&quot;/home/jenkins/workspace/checkstyle.xml&quot; /&gt;</span><br><span class="line">        &lt;property name=&quot;checkstyle.report.style&quot; value=&quot;/var/lib/jenkins/plugins/checkstyle/WEB-INF/lib/checkstyle-frames.xsl&quot; /&gt;</span><br><span class="line">        &lt;property name=&quot;checkstyle.result&quot; value=&quot;$&#123;project.checkstyle.report.dir&#125;/$&#123;project.checkstyle.result.name&#125;&quot; /&gt;</span><br><span class="line">        &lt;property name=&quot;checkstyle.report&quot; value=&quot;$&#123;project.checkstyle.report.dir&#125;/$&#123;project.checkstyle.report.name&#125;&quot; /&gt;</span><br><span class="line">        &lt;mkdir dir=&quot;$&#123;project.checkstyle.report.dir&#125;&quot; /&gt;</span><br><span class="line">    &lt;/target&gt;</span><br><span class="line">    &lt;taskdef resource=&quot;checkstyletask.properties&quot; classpath=&quot;/var/lib/jenkins/plugins/checkstyle/WEB-INF/lib/checkstyle-6.5-all.jar&quot; /&gt;</span><br><span class="line">    &lt;target name=&quot;checkstyle&quot; depends=&quot;init&quot; description=&quot;check java code and report.&quot;&gt;</span><br><span class="line">        &lt;checkstyle config=&quot;$&#123;checkstyle.config&#125;&quot; failureProperty=&quot;checkstyle.failure&quot; failOnViolation=&quot;false&quot;&gt;</span><br><span class="line">            &lt;formatter type=&quot;xml&quot; tofile=&quot;$&#123;checkstyle.result&#125;&quot; /&gt;</span><br><span class="line">            &lt;fileset dir=&quot;/home/jenkins/workspace/广西开机广告项目&quot; includes=&quot;**/*.java&quot; /&gt;</span><br><span class="line">            &lt;!-- 检查源代码的存放路径 --&gt;</span><br><span class="line">        &lt;/checkstyle&gt;</span><br><span class="line">        &lt;!--&lt;style in=&quot;$&#123;checkstyle.result&#125;&quot; out=&quot;$&#123;checkstyle.report&#125;&quot; style=&quot;$&#123;checkstyle.report.style&#125;&quot; /&gt;</span><br><span class="line">         通过指定的xsl模版文件生成一份html的报告，这里生成的文件用于邮件发送时附加上，另外Jenkins插件也会生成可视化的结果  --&gt;</span><br><span class="line">    &lt;/target&gt;</span><br><span class="line">    &lt;target name=&quot;xml2html&quot; depends=&quot;checkstyle&quot;&gt;</span><br><span class="line">        &lt;!-- 将生产结果根据扩展样式表文件checkstyle-frames.xsl生成html页面,输出到html --&gt;</span><br><span class="line">        &lt;xslt in=&quot;$&#123;checkstyle.result&#125;&quot; out=&quot;$&#123;checkstyle.report&#125;&quot; style=&quot;$&#123;checkstyle.report.style&#125;&quot;&gt;&lt;/xslt&gt;</span><br><span class="line">    &lt;/target&gt;</span><br><span class="line">&lt;/project&gt;</span><br></pre></td></tr></table></figure>

      
    </div>
    <footer class="article-footer">
      <a data-url="http://yoursite.com/2018/10/12/2018-06-15-Jenkins持续集成入门篇/" data-id="cjoztxu5k001z1wij003tha02" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/org/tags/jenkins/">jenkins</a></li></ul>

    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/org/2018/10/12/2018-01-21-Spring-secrity-rememberme-annotaion/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          Spring-secrity-rememberme-annotaion
        
      </div>
    </a>
  
  
    <a href="/org/2018/10/12/2018-06-17-SpringBoot2.0属性绑定/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">springboot2 属性绑定</div>
    </a>
  
</nav>

  
</article>

</section>
        
          <aside id="sidebar">
  
    

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list"><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/SVN/">SVN</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/Spring-secrity/">Spring-secrity</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/hexo/">hexo</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/hibenrate/">hibenrate</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/jekyll/">jekyll</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/jenkins/">jenkins</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/redis/">redis</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/shiro/">shiro</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/spingMVC/">spingMVC</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/spring-cloud/">spring cloud</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/spring-cloud/">spring-cloud</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/spring-secrity/">spring-secrity</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/springMVC/">springMVC</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/springboot/">springboot</a></li><li class="tag-list-item"><a class="tag-list-link" href="/org/tags/生活/">生活</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/org/tags/SVN/" style="font-size: 12px;">SVN</a> <a href="/org/tags/Spring-secrity/" style="font-size: 10px;">Spring-secrity</a> <a href="/org/tags/hexo/" style="font-size: 10px;">hexo</a> <a href="/org/tags/hibenrate/" style="font-size: 10px;">hibenrate</a> <a href="/org/tags/jekyll/" style="font-size: 10px;">jekyll</a> <a href="/org/tags/jenkins/" style="font-size: 10px;">jenkins</a> <a href="/org/tags/redis/" style="font-size: 16px;">redis</a> <a href="/org/tags/shiro/" style="font-size: 18px;">shiro</a> <a href="/org/tags/spingMVC/" style="font-size: 10px;">spingMVC</a> <a href="/org/tags/spring-cloud/" style="font-size: 10px;">spring cloud</a> <a href="/org/tags/spring-cloud/" style="font-size: 10px;">spring-cloud</a> <a href="/org/tags/spring-secrity/" style="font-size: 12px;">spring-secrity</a> <a href="/org/tags/springMVC/" style="font-size: 14px;">springMVC</a> <a href="/org/tags/springboot/" style="font-size: 20px;">springboot</a> <a href="/org/tags/生活/" style="font-size: 10px;">生活</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/org/archives/2018/11/">November 2018</a></li><li class="archive-list-item"><a class="archive-list-link" href="/org/archives/2018/10/">October 2018</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/org/2018/11/27/redis07-zookeeper-kafka集群部署以及如何使用简单介绍/">redis07-zookeeper+kafka集群部署以及如何使用简单介绍</a>
          </li>
        
          <li>
            <a href="/org/2018/11/13/redis06-cluster实现高可用性/">redis06-cluster实现高可用性</a>
          </li>
        
          <li>
            <a href="/org/2018/11/12/redis05-在项目中搭建读写分-高可用-多master的redis-cluster集群/">redis05-在项目中搭建读写分+高可用+多master的redis cluster集群</a>
          </li>
        
          <li>
            <a href="/org/2018/11/05/在项目中用经典的三节点方式部署哨兵集群-笔记/">在项目中用经典的三节点方式部署哨兵集群-笔记</a>
          </li>
        
          <li>
            <a href="/org/2018/11/05/redis哨兵的多个核心底层原理-笔记/">redis哨兵的多个核心底层原理-笔记</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2018 John Doe<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/org/" class="mobile-nav-link">Home</a>
  
    <a href="/org/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//code.jquery.com/jquery-2.0.3.min.js"></script>


  <link rel="stylesheet" href="/org/fancybox/jquery.fancybox.css">
  <script src="/org/fancybox/jquery.fancybox.pack.js"></script>


<script src="/org/js/script.js"></script>



  </div>
</body>
</html>